1. Technical Field
The present disclosure relates to software versioning and more specifically to efficiently and adaptively performing incremental software installations.
2. Introduction
Software developers are distributing their software in many rapidly evolving ways. Originally, software developers distributed software in physical media. For example, CDs and DVDs containing a particular software program were mailed or distributed via retail outlets. The expenses and inefficiencies of this approach have prompted new strategies for software distribution.
More recently, network distribution of software has partially replaced physical media as the favored distribution method. With network distribution of software, developers provide a software installation package which users can download from a web browser or other network connection. The installation package is typically pre-configured to install the software application or download and execute the main installation package. The software application or installation package may include a process that checks for a more current version and downloads the most current version or updates to that version.
To update a specific version of software on a device, the installation package is typically pre-configured to perform a complete installation of the latest version of the software. However, a complete installation can be time-consuming and may result in multiple versions of software on the device. Thus, as an alternative, the installation package is often pre-configured to update the software on the device by installing a linear progression of updates, from lower release numbers to higher. Each update is developed beforehand and pre-configured to update a specific version of software. Both solutions assume that only the latest version of software is required, which limits the range of deployments and customizations possible. Each installation and update application requires large amounts of manual effort to construct, and each requires a large amount of time to test—a potentially slow and expensive proposition.
The current software installation methods can be difficult and expensive, particularly at scale. Users generally need to be informed that an installation is required. Sufficient permissions must be acquired on the target system for software deployment. Update installations can result in multiple versions of the software on the device. Older versions of software may occupy large amounts of disk space and can be difficult to remove. The process of updating the software is inflexible and time-consuming. A large amount of manual effort is required to construct, test, and implement installation and update applications. The static nature of current installation systems result in limited scalability and customization.